코코아 (API)
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
코코아는 애플에서 개발한 객체 지향 프레임워크로, macOS, iOS, iPadOS, watchOS, tvOS 등 애플 플랫폼에서 애플리케이션을 개발하는 데 사용된다. NeXTSTEP과 OpenStep에서 파생되었으며, Foundation Kit, Application Kit, Core Data 등의 주요 프레임워크를 포함한다. 코코아는 모델-뷰-컨트롤러(MVC) 아키텍처를 기반으로 하며, Objective-C를 핵심 언어로 사용하지만, Swift, AppleScriptObjC, 다양한 언어 바인딩을 통해서도 접근 가능하다. 메모리 관리를 위해 자동 참조 카운팅(ARC)을 사용하며, GNUstep과 Cocotron과 같은 오픈 소스 구현체도 존재한다.
더 읽어볼만한 페이지
코코아 (API) - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
개발사 | 애플 |
최신 버전 | (정보 없음) |
최신 버전 출시일 | (정보 없음) |
미리보기 버전 | (정보 없음) |
미리보기 버전 출시일 | (정보 없음) |
프로그래밍 언어 | C, C++, Objective-C, 스위프트 |
운영 체제 | macOS |
장르 | 소프트웨어 프레임워크 |
라이선스 | 사유 (일부 오픈 소스 구성 요소 포함) |
웹사이트 | Apple Developer |
2. 역사
코코아는 1980년대와 1990년대 NeXT에서 개발한 NeXTSTEP 및 OpenStep 프로그래밍 환경의 프레임워크, 특히 'App Kit'과 'Foundation Kit'을 계승한다.[2] 1996년 애플이 NeXT를 인수하면서 OpenStep 기반의 운영 체제인 랩소디 개발이 시작되었고, 이는 Mac OS X로 발전하면서 옐로우 박스(Yellow Box)로 불리던 OpenStep 기반 기술은 코코아로 이름이 변경되었다.[2] 코코아 클래스 이름이 'NS'로 시작하는 것은 NeXTSTEP의 흔적이다.[2]
애플은 원래 어린이용 멀티미디어 프로젝트 디자인 응용 프로그램에 '코코아'라는 상표를 사용했으나, 스티브 잡스 복귀 후 중단되었다.[3] 당시 자바가 주요 초점 분야였기 때문에, Objective-C 외에 자바에서도 접근할 수 있도록 브리징 레이어를 통해 지원하면서 '옐로우 박스'의 새 이름으로 '코코아'가 사용되었다.[4] 코코아 자바 브리지는 현재 지원 중단되었지만, '코코아'라는 이름은 코코아 터치 API에도 계속 사용되고 있다.[4] 코코아 터치는 아이폰, 아이패드, 아이팟 터치용 API이며, 애플이 개발하여 제공하고 있다.
2. 1. 메모리 관리
코코아는 동적으로 할당된 메모리 관리를 위해 Foundation Kit의 NSObject 클래스에서 구현된 참조 카운팅 방식을 사용한다. NSObject에서 파생된 객체는 `retain` 및 `release` 메시지에 응답하고 유지 카운트를 유지한다. `alloc` 또는 `copy`로 생성된 객체는 유지 카운트가 1이며, `retain` 메시지를 보내면 증가하고 `release` 메시지를 보내면 감소한다. 유지 카운트가 0이 되면 객체가 할당 해제된다.Objective-C 2.0부터는 선택적인 가비지 컬렉터가 구현되었으나, 현재는 자동 참조 카운팅(ARC)으로 대체되었다. 가비지 컬렉션은 iOS에는 존재하지 않으며, 낮은 우선 순위의 백그라운드 스레드에서 실행되고 코코아 사용자 이벤트에 의해 중단될 수 있다. 레거시 가비지 컬렉터는 Mac OS X 버전 10.13에서 여전히 사용할 수 있지만, Apple에서 제공하는 애플리케이션은 이를 사용하지 않는다.[1]
2011년, LLVM 컴파일러는 Objective-C 소스 코드를 정적으로 분석하여 retain 및 release 메시지를 자동으로 삽입하는 자동 참조 카운팅(ARC)을 도입하여 기존의 가비지 컬렉터를 대체했다.[2]
3. 주요 프레임워크
코코아는 '''프레임워크'''라고 불리는 세 가지 Objective-C 객체 라이브러리로 구성된다. 프레임워크는 공유 라이브러리와 기능적으로 유사하며, 런타임에 프로그램의 주소 공간에 동적으로 로드될 수 있는 컴파일된 객체이지만, 관련 리소스, 헤더 파일 및 문서를 추가한다는 점에서 차이가 있다. 코코아 프레임워크는 이러한 항목들을 표준 위치에 포함하는 일종의 번들로 구현된다.
코코아는 OS 기능이나 컬렉션 클래스 등을 묶은 서비스 층인 '''Foundation'''과 주로 GUI 부품 집합인 '''AppKit''', 그리고 객체 지속성 프레임워크인 '''Core Data'''로 구성된다. 좁은 의미에서는 Foundation Kit과 Application Kit을 코코아 프레임워크라고 부르며[17], 엄밀한 구분은 아니지만 AddressBook API 등 주변 서비스를 제공하는 Objective-C 프레임워크를 광의의 코코아라고 부르기도 한다.
Mac OS X v10.3에서는 모델-뷰 간의 동기화를 자동화하는 Cocoa Binding(Controller 층)이, Mac OS X v10.4에서는 모델링을 자동화하는 Core Data가 구현되어 기술의 추상도가 더욱 높아졌다.
코코아 아키텍처의 핵심은 포괄적인 뷰 모델이다. 이는 응용 프로그램 프레임워크에 대한 일반적인 방식에 따라 구성되지만, Quartz에서 제공하는 PDF 드로잉 모델을 기반으로 한다. 이를 통해 PostScript와 유사한 드로잉 명령을 사용하여 사용자 지정 드로잉 콘텐츠를 생성할 수 있으며, 자동 프린터 지원 등을 사용할 수 있다. 코코아 프레임워크는 그래픽을 그리는 모든 클리핑, 스크롤, 스케일링 및 기타 작업을 관리하므로, 프로그래머는 기본 인프라 구현 대신 응용 프로그램 콘텐츠의 고유한 측면에 집중할 수 있다.
코코아는 Objective-C를 핵심 언어로 사용하는 객체 지향 프레임워크이다. 기본 구조는 MVC 아키텍처이며, 그 외에 위임(Delegate), 팩토리, 책임 연쇄 패턴 등이 많이 사용된다. 추상도가 높은 하위 서비스와 유연한 뷰(View)의 조합이 특히 강력하며, 그대로 이용하거나 고도로 커스터마이징하는 등 폭넓게 활용할 수 있다.
코코아 자체는 순수한 기능 집합이며, Objective-C 실행 환경과의 통신을 확립하면 다른 언어에서도 이용할 수 있다. 이에 따라 현재는 Java, Perl, Ruby, Python, Common Lisp 등 각종 컴파일러 언어나 스크립트 언어와의 언어 브리지가 확립되어 있다(이러한 언어 내에서 클래스를 정의하여 Objective-C 측에서 호출하는 것도 가능). 하지만 C나 C++(C++)에서는 직접 코코아를 사용할 수 없으므로, macOS에서는 C/C++ 프로그래머를 위해 코코아와 거의 동일한 기능을 가진 Carbon API도 제공하고 있다.
3. 1. Foundation Kit
Foundation Kit(줄여서 ''Foundation'')는 문자열 및 값 조작, 컨테이너 및 반복, 분산 컴퓨팅, 이벤트 루프 (런 루프) 및 그래픽 사용자 인터페이스와 직접적으로 관련되지 않은 기타 기능을 제공하는 일반적인 객체 지향 라이브러리이다. 프레임워크의 모든 클래스 및 상수에 사용되는 "NS" 접두사는 NeXT와 선 마이크로시스템즈(Sun Microsystems)가 공동으로 개발한 코코아의 OPENSTEP 유산에서 유래했다.[5] macOS에서 Foundation은 Core Foundation을 기반으로 한다.3. 2. Application Kit
Application Kit(AppKit)는 프로그램이 그래픽 사용자 인터페이스를 생성하고 상호 작용하는 데 사용할 수 있는 코드를 포함하고 있으며, Foundation 위에 구축되어 있다. NeXTSTEP Application Kit에서 직접 파생되었으며, "NS" 접두사를 사용한다.[5]3. 3. Core Data
Core Data는 객체 지속성(Object Persistence)을 위한 프레임워크로, 모델 계층에서 변경 추적 및 지속성을 표준화한다.[1] 애플리케이션 데이터 변경, 실행 취소, 디스크 저장 및 로드 과정을 단순화한다. Mac OS X v10.4에서 모델링을 자동화하는 Core Data가 구현되어 기술의 추상도가 더 높아졌다. Core Data는 Foundation 및 Cocoa에 포함되어 있으며 Cocoa.h에서 찾을 수 있다.[1]4. 아키텍처
코코아는 Objective-C를 핵심 언어로 사용하는 객체 지향 프레임워크이다. OS 기능이나 컬렉션, 클래스 등을 묶은 서비스 층인 '''Foundation'''과 주로 GUI 부품 집합인 '''AppKit'''의 두 계층 구조를 이루며, 좁은 의미에서는 이 두 가지(Core frameworks)를 코코아 프레임워크라고 부른다[17] . AddressBook API 등 주변 서비스를 제공하는 Objective-C로 작성된 프레임워크를 광의로 코코아라고 부르기도 한다.
기본 구조는 MVC 아키텍처이며, 위임(Delegate), 팩토리, 책임 연쇄 패턴 등이 많이 사용된다. 추상도가 높은 하위 서비스와 유연한 View의 조합이 특히 강력하며, 그대로 이용하거나 고도로 커스터마이징 할수 있다. Mac OS X v10.3에서는 모델-뷰 간의 동기화를 자동화하는 코코아 바인딩(Controller 층)이, Mac OS X v10.4에서는 모델링을 자동화하는 Core Data가 구현되었다.
코코아 자체는 순수한 기능 집합이며, Objective-C 실행 환경과의 통신을 확립하면 다른 언어에서도 이용이 가능하다. Java, Perl, Ruby, Python, Common Lisp 등 각종 컴파일러 언어나 스크립트 언어와의 언어 브리지가 확립되어 있다(이러한 언어 내에서 클래스를 정의하여 Objective-C 측에서 호출하는 것도 가능하다). 하지만 C나 C++(C++)에서는 직접 코코아를 사용할 수 없으므로, macOS에서는 C/C++ 프로그래머를 위해 코코아와 거의 같은 기능을 가진 Carbon API도 준비되어 있다.
4. 1. 모델-뷰-컨트롤러 (MVC)
제록스 PARC의 스몰토크 팀은 쉬운 개발과 높은 코드 재사용을 가능하게 하는 설계 철학을 정립했다. '''모델-뷰-컨트롤러'''(MVC)로 명명된 이 개념은 애플리케이션을 상호 작용하는 세 가지 객체 클래스 집합으로 나눈다.- 모델 클래스는 문제 영역의 데이터와 연산(예: 사람/부서/예산 목록, 스타일이 지정된 텍스트의 섹션/단락/각주가 포함된 문서)을 나타낸다.
- 뷰 클래스는 인간-컴퓨터 상호 작용을 위한 시각적 표현과 편의성을 구현한다(예: 캡션이 있는 아이콘의 스크롤 가능한 그리드 및 가능한 연산의 팝업 메뉴).
- 컨트롤러 클래스는 모델 데이터를 뷰 표현으로 노출하고, 편의성으로 시작된 사용자 작업을 모델 연산에 매핑하며, 두 개를 동기화 상태로 유지하는 로직을 포함한다.
코코아의 설계는 MVC 원칙을 상당히 엄격하게 적용한 것이지만, 절대적으로 엄격하지는 않다. OpenStep에서는 제공된 대부분의 클래스가 AppKit의 고급 뷰 클래스이거나 NSString과 같은 비교적 낮은 수준의 모델 클래스 중 하나였다. 유사한 MVC 시스템과 비교했을 때 OpenStep에는 강력한 모델 계층이 부족했다. 예를 들어, "문서"를 나타내는 표준 클래스가 없었다. 코코아로 전환하는 동안 모델 계층이 크게 확장되었으며 데스크톱 애플리케이션에 공통적인 기능을 제공하기 위해 사전 구축된 여러 클래스가 도입되었다.
Mac OS X 10.3에서 애플은 컨트롤러 계층에 대한 미리 정의된 동작을 제공하는 NSController 클래스 제품군을 도입했다. 이 클래스는 코코아 바인딩 시스템의 일부로 간주되며, 키-값 관찰 및 키-값 바인딩과 같은 프로토콜을 광범위하게 사용한다. '바인딩'이라는 용어는 두 객체 간의 관계, 종종 뷰와 컨트롤러 간의 관계를 의미한다. 바인딩을 통해 개발자는 미세한 동작을 조율하는 것보다 선언적 관계에 더 집중할 수 있다.
Mac OS X 10.4가 출시되면서 애플은 모델 계층에서 변경 추적 및 지속성을 표준화하는 Core Data 프레임워크를 도입하여 이 기반을 더욱 확장했다. 실제로 이 프레임워크는 애플리케이션 데이터를 변경하고, 필요한 경우 변경 사항을 실행 취소하고, 데이터를 디스크에 저장하고 다시 읽는 프로세스를 크게 단순화한다.
애플은 세 가지 MVC 도메인 모두에 대한 프레임워크 지원을 제공함으로써 개발자가 작성해야 하는 보일러플레이트 또는 "글루" 코드의 양을 줄이고 애플리케이션 관련 기능에 시간을 할애할 수 있도록 하는 것을 목표로 한다.
대부분의 객체 지향 프로그래밍 언어에서 메서드 호출은 메모리 내 코드에 대한 포인터로 물리적으로 표현된다. 이는 특정 ''명령 처리'' 클래스가 필요하고 일반적으로 책임 연쇄 패턴에 따라 구성되므로 애플리케이션의 설계를 제한한다. Cocoa는 대부분 이 방식을 유지하지만, Objective-C의 늦은 바인딩은 더 많은 유연성을 제공한다.
Objective-C에서 메서드는 호출할 메서드를 설명하는 문자열인 ''선택자''로 표현된다. 메시지가 전송되면 선택자가 Objective-C 런타임으로 전송되어 사용 가능한 메서드 목록과 일치하고 메서드의 ''구현''이 호출된다. 선택자는 텍스트 데이터이므로 파일에 저장하거나, 네트워크 또는 프로세스 간에 전송하거나, 다른 방식으로 조작할 수 있다. 메서드의 구현은 컴파일 시점이 아닌 런타임에 조회된다. 이로 인해 약간의 성능 저하가 발생하지만,[6] 늦은 바인딩을 통해 동일한 선택자가 다른 구현을 참조할 수 있다.
마찬가지로 Cocoa는 ''키-값 코딩''(KVC)이라는 광범위한 데이터 조작 방법을 제공한다.[7] 이를 통해 런타임에 객체의 데이터 또는 속성을 이름으로 조회하거나 변경할 수 있다. 속성 이름은 값에 대한 키 역할을 한다. 기존 언어에서는 이러한 늦은 바인딩이 불가능하다. KVC는 훌륭한 설계 유연성을 제공한다. 객체의 유형을 알 필요는 없지만 KVC를 사용하여 해당 객체의 모든 속성을 찾을 수 있다. 또한 Cocoa가 ''키-값 관찰''(KVO)이라고 부르는 것을 사용하여 이 시스템을 확장하면 실행 취소/다시 실행에 대한 자동 지원이 제공된다.
4. 2. 풍부한 객체
코코아는 시스템에서 제공하는 강력한 ''기본 객체''를 제공한다. 예를 들어, 유니코드 문자열을 제공하는 Foundation 클래스 `NSString` 및 `NSAttributedString`과, GUI에 문자열 객체를 배치할 수 있도록 해주는 AppKit의 NSText 시스템이 있다.[17]`NSText` 및 관련 클래스는 문자열을 표시하고 편집하는 데 사용된다. 관련된 객체 모음을 통해 애플리케이션은 텍스트 입력 필드부터 전문 타이포그래피 기능(예: 커닝, 합자), 임의 모양 주위의 텍스트 흐름, 회전, 유니코드 지원, 안티 앨리어싱 글리프 렌더링 등 다양한 기능을 갖춘 다중 페이지, 다중 열 텍스트 레이아웃을 구현할 수 있다. 단락 레이아웃은 내장된 "눈금자" 객체를 사용하여 자동 또는 사용자가 제어할 수 있으며, 이 눈금자는 모든 텍스트 보기에 연결할 수 있다. 맞춤법 검사는 시스템 전체 언어 사전을 사용하여 자동으로 수행된다. 무제한 실행 취소/다시 실행 지원이 내장되어 있으며, 내장된 기능만 사용하여 10줄의 코드만으로 텍스트 편집기 애플리케이션을 작성할 수 있다.
확장이 필요한 경우, 코코아에서 Objective-C를 사용하는 것은 간단하다. Objective-C에는 기존 클래스를 수정할 수 있는 "[https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1 categories|카테고리]" 개념이 포함되어 있다. 프레임워크의 원래 클래스를 변경하거나 해당 소스에 접근하지 않고도 카테고리에서 기능을 수행할 수 있다.
5. 구현 및 바인딩
코코아 프레임워크는 Objective-C로 작성되었다.[8] 과거에는 코코아 프레임워크에 대한 자바 바인딩(자바 브리지)이 제공되기도 했으나,[8] 코코아 개발자들 사이에서 인기가 없었고, 코코아의 메시지 전달 의미 체계가 자바와 같은 정적으로 형식이 지정된 언어로 잘 변환되지 않아 2005년에 애플은 자바 브리지가 더 이상 사용되지 않을 것이라고 발표했다.[9]
애플 세계 개발자 회의(WWDC) 2014에서 애플은 Objective-C를 대체하기 위한 새로운 프로그래밍 언어인 Swift를 소개했다.[10]
5. 1. AppleScriptObjC
AppleScript를 통해 코코아 프레임워크를 사용할 수 있게 해준다.[12]5. 2. 기타 바인딩
PasCocoa, PyObjC, CamelBones, RubyCocoa, D/Objective-C 브리지 등을 통해 코코아 프로그래밍 환경을 다른 도구에서 사용할 수 있다.[17]AppleScript, Clozure CL, Monobjc, NObjective (C#), Cocoa# (CLI), Cocodao, D/Objective-C Bridge, LispWorks, Object Pascal, CamelBones (Perl), PyObjC (파이썬), FPC PasCocoa (Lazarus 및 Free Pascal), RubyCocoa (루비)와 같은 타사 바인딩도 존재한다.[17]
MacRuby는 과거 애플에서 개발한 루비 언어 구현이며, 브리지 메커니즘이 필요 없다. Nu는 Objective-C 객체 모델을 직접 사용하는 Lisp와 유사한 언어이므로 바인딩 없이 코코아 프레임워크를 사용할 수 있다.[17]
5. 3. 기타 구현
GNUstep과 Cocotron[16] 등은 코코아 프레임워크의 주요 부분을 오픈 소스로 구현한 것이다. 이를 통해 마이크로소프트 윈도우나 리눅스와 같은 다른 운영 체제를 대상으로 크로스 플랫폼 코코아 응용 프로그램 개발을 할 수 있다.참조
[1]
웹사이트
Mac Technology Overview: OS X Frameworks
https://developer.ap[...]
2013-09-18
[2]
서적
Mac OS X Internals: A Systems Approach
https://books.google[...]
Addison-Wesley Professional
2006-06-19
[3]
뉴스
A Sour Note in Apple's Rhapsody Once-Loyal Software Writers Wary of New OS as Crucial Conference Looms
http://nl.newsbank.c[...]
2015-08-13
[4]
간행물
WWDC 1999
http://archive.org/d[...]
2024-04-27
[5]
웹사이트
HybridWorld
http://www.cilinder.[...]
2013-09-18
[6]
Wikibooks
Wikibooks - Some Objective-C advantages
"[[Wikibooks:Program[...]
[7]
웹사이트
Key-Value Coding Programming Guide
https://developer.ap[...]
2021-09-27
[8]
학술지
Writing Cocoa Apps in Java
http://www.mactech.c[...]
[9]
웹사이트
Using the Java Bridge
https://developer.ap[...]
Apple Inc.
[10]
웹사이트
Apple's top secret Swift language grew from work to sustain Objective-C, which it now aims to replace
http://appleinsider.[...]
2014-06-04
[11]
웹사이트
AppleScript Studio Programming Guide (Not Recommended): About AppleScript Studio
https://developer.ap[...]
Apple, Inc.
2013-11-20
[12]
웹사이트
AppleScriptObjC Release Notes
https://developer.ap[...]
Apple, Inc.
2013-11-20
[13]
웹사이트
Cocodao
http://sourceforge.n[...]
[14]
웹사이트
D/Objective-C Bridge
http://michelf.com/w[...]
[15]
웹사이트
more extensive list of implementations
http://osx.hyperjeff[...]
[16]
웹사이트
Cocotron
http://www.cocotron.[...]
[17]
웹사이트
What Is Cocoa? | Cocoa Fundamentals Guide | Apple Developer
https://developer.ap[...]
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com